package cn.stylefeng.guns.modular.business.service;

import cn.stylefeng.guns.modular.business.entity.SubFileInfo;
import cn.stylefeng.guns.modular.business.pojo.SubFileInfoRequest;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 *  服务类
 *
 * @author zhangyaowen
 * @date 2021/08/19 16:49
 */
public interface SubFileInfoService extends IService<SubFileInfo> {

	/**
     * 新增
     *
     * @param subFileInfoRequest 请求参数
     * @author zhangyaowen
     * @date 2021/08/19 16:49
     */
    void add(SubFileInfoRequest subFileInfoRequest);

	/**
     * 删除
     *
     * @param subFileInfoRequest 请求参数
     * @author zhangyaowen
     * @date 2021/08/19 16:49
     */
    void delete(SubFileInfoRequest subFileInfoRequest);

	/**
     * 编辑
     *
     * @param subFileInfoRequest 请求参数
     * @author zhangyaowen
     * @date 2021/08/19 16:49
     */
    void edit(SubFileInfoRequest subFileInfoRequest);

	/**
     * 查询详情
     *
     * @param subFileInfoRequest 请求参数
     * @author zhangyaowen
     * @date 2021/08/19 16:49
     */
    SubFileInfo detail(SubFileInfoRequest subFileInfoRequest);

	/**
     * 获取指定数据的文件信息
     *
     * @param subFileInfoRequest        请求参数
     * @return List<SubFileInfo>   返回结果
     * @author zhangyaowen
     * @date 2021/08/19 16:49
     */
    List<SubFileInfo> findList(SubFileInfoRequest subFileInfoRequest);

    /**
     * 通过大类别和名字来查询文件
     *
     * @param subFileInfoRequest
     * @return
     */
    List<SubFileInfo> findListByName(SubFileInfoRequest subFileInfoRequest);
	/**
     * 获取列表（带分页）
     *
     * @param subFileInfoRequest              请求参数
     * @return PageResult<SubFileInfo>   返回结果
     * @author zhangyaowen
     * @date 2021/08/19 16:49
     */
    PageResult<SubFileInfo> findPage(SubFileInfoRequest subFileInfoRequest);

    /**
     * 获取列表（带分页）
     *
     * @param subFileInfoRequest              请求参数
     * @return PageResult<SubFileInfo>   返回结果
     * @author zhangyaowen
     * @date 2021/08/19 16:49
     */
    PageResult<SubFileInfo> findPageOne(SubFileInfoRequest subFileInfoRequest);

    /**
     * 通过id查询
     * @param subFileInfoRequest
     * @return
     */
    PageResult<SubFileInfo> findPageById(SubFileInfoRequest subFileInfoRequest);
    /**
     *
     * @param subFileInfoRequest
     * @return
     */
    List<SubFileInfo> findIndexId(SubFileInfoRequest subFileInfoRequest);
    /**
     * 上传文件，返回文件的唯一标识
     *
     * @param file 要上传的文件
     * @return 文件id
     * @author stylefeng
     * @date 2020/6/9 21:21
     */
    Long uploadFile(MultipartFile file);

    /**
     * 获取文件信息结果集
     *
     * @param fileId 文件id
     * @return 文件信息结果集
     * @author stylefeng
     * @date 2020/6/9 21:56
     */
    SubFileInfoRequest getFileInfoResult(Long fileId);

    /**
     * 判断文件是否存在
     *
     * @param field 文件id
     * @author xuyuxiang
     * @date 2020/6/28 15:55
     */
    void assertFile(Long field);

    /**
     * 文件预览
     *
     * @param subFileInfoRequest 文件预览参数
     * @param response         响应结果
     * @author xuyuxiang
     * @date 2020/7/7 11:23
     */
    void preview(SubFileInfoRequest subFileInfoRequest, HttpServletResponse response);

    /**
     * 文件下载
     *
     * @param subFileInfoRequest 文件下载参数
     * @param response         响应结果
     * @author xuyuxiang
     * @date 2020/7/7 12:09
     */
    void download(SubFileInfoRequest subFileInfoRequest, HttpServletResponse response);

    /**
     * 缩略图
     * @param subFileInfoRequest
     * @param response
     */
    void rarPreview(SubFileInfoRequest subFileInfoRequest, HttpServletResponse response);

    /**
     * 获取列表信息
     * @param subFileInfoRequest
     * @return
     */
    List<SubFileInfo> findAllList(SubFileInfoRequest subFileInfoRequest);


    List<Map<String,Object>> findAllInfo(String[] types, String name);

    /**
     * 获取列表（带分页）
     *
     * @param subFileInfoRequest              请求参数
     * @return PageResult<SubFileInfo>   返回结果
     * @author zhangyaowen
     * @date 2021/08/19 16:49
     */
    PageResult<SubFileInfo> findImage(SubFileInfoRequest subFileInfoRequest);

//    /**
//     * 上传
//     * @param file
//     * @return
//     */
//    Map<String ,Object> uploadFileOss(MultipartFile file);
//
//    /**
//     * 获取压缩图片文件
//     * @param subFileInfoRequest
//     * @param response
//     */
//    void rarPreviewOss(SubFileInfoRequest subFileInfoRequest, HttpServletResponse response);
//
//    /**
//     * 获取文件的源文件
//     * @param subFileInfoRequest
//     * @param response
//     */
//    void previewOss(SubFileInfoRequest subFileInfoRequest, HttpServletResponse response);


    List<Map<String,Object>> assFileByValue(String value ,String fileType);
}
